#include <bits/stdc++.h>
#include "qubit.h"
#include "qreg.h"
#include "creg.h"
#include "qcircuit.h"

using namespace std;

void simon_circuit(){
    qreg qr(6);
    creg cr(3);
    
    qcircuit circuit(qr, cr);

    for ( int i = 0; i < 3; ++ i )
        circuit.h(qr.reg[i]);

    // oracle
    circuit.cx(qr.reg[1], qr.reg[4]);
    circuit.cx(qr.reg[2], qr.reg[5]);

    for ( int i = 0; i < 3; ++ i )
        circuit.h(qr.reg[i]);

    circuit.measure(qr.reg[0], cr.reg[0]);
    circuit.measure(qr.reg[1], cr.reg[1]);
    circuit.measure(qr.reg[2], cr.reg[2]);
    circuit.draw();
}

int main(){
    simon_circuit();
    return 0;
}